-- 1.接受参数
local voucherId = ARGV[1]
local userId = ARGV[2]
-- 1.1.获取订单id
local orderId = ARGV[3]
-- 2.数据key
local stockKey = 'seckill:stock:' .. voucherId
-- 订单key
local orderKey = 'seckill:order:' .. voucherId

-- 3.获取库存并判断是否充足
local stockValue = redis.call('get', stockKey)
local stock = tonumber(stockValue)
if (stock == nil) or (stock <= 0) then
    return 1
end

--4 判断用户是否已经下过单
if(redis.call('sismember', orderKey, userId)==1) then
    return 2
end

--5扣库存
redis.call('incrby', stockKey, -1)
--6下单保存用户
redis.call('sadd', orderKey, userId)
--发送消息保存到消息队列
redis.call('XADD', 'stream.orders','*', 'userId', userId, 'voucherId', voucherId, 'id', orderId)
return 0